package com.study.spark.scala.rdd

import org.apache.spark.storage.StorageLevel
import org.apache.spark.{SparkConf, SparkContext}

/**
  * 什么情况下进行cache
  *
  * 1. 要求计算速度快
  * 2. 集群资源足够大
  * 3. 重要：cache的数据会多次进行出发Action
  * 4. 先进行过滤，缩小范围后的数据再cache到内存
  *
  * @author stephen
  * @create 2019-03-15 09:10
  * @since 1.0.0
  */
object CacheDemo {

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
      .setMaster("local[*]")
      .setAppName("Cache Demo")
    val sc = new SparkContext(conf)

    val rdd = sc.textFile("hdfs://localhost:9000/bigdata-study/spark")
    // 先将数据进行过滤
    val filterRdd = rdd.filter(!_.equals(""))

    // 缓存RDD数据到worker节点，
    // 默认情况下优先缓存到内存，其次是磁盘
    //val cachedRdd = filterRdd.cache()
    val cachedRdd = filterRdd.persist(StorageLevel.MEMORY_ONLY)

    // 多次使用缓存的RDD


    // 异步的释放缓存的rdd
    cachedRdd.unpersist(true)

    sc.stop()
  }
}
